package org.nutz.dao.impl.link;

import java.util.Map;

import org.nutz.dao.FieldFilter;
import org.nutz.dao.FieldMatcher;
import org.nutz.dao.entity.LinkField;
import org.nutz.dao.impl.AbstractLinkVisitor;
import org.nutz.lang.Lang;

public class DoUpdateLinkVisitor extends AbstractLinkVisitor {

	public void visit(Object obj, final LinkField lnk) {
		Object value = lnk.getValue(obj);
		if (Lang.length(value) == 0)
			return;
		if (value instanceof Map<?, ?>)
			value = ((Map<?, ?>) value).values();

		FieldMatcher fm = FieldFilter.get(lnk.getLinkedEntity().getType());

		// 如果需要忽略 Null 字段，则为每个 POJO 都生成一条语句
		if (null != fm && fm.isIgnoreNull()) {
			opt.addUpdateForIgnoreNull(lnk.getLinkedEntity(), value, fm);
		}
		// 否则生成一条批处理语句
		else {
			opt.addUpdate(lnk.getLinkedEntity(), value);
		}

	}

}
